require('dotenv').config();
import express from 'express';
import { initializePool } from './config/database';
import userRoutes from './routes/user.route';
import profileRoutes from './routes/profile.route';
import rolesRoutes from './routes/roles.route';

const app = express();
const port = process.env.PORT || 3000;

// 初始化数据库连接池
initializePool();

// 中间件
app.use(express.json());// 解析json请求体

// 路由
app.use('/api/users', userRoutes);
app.use('/api/profiles', profileRoutes);
app.use('/api/roles', rolesRoutes);

// 健康检查端点
app.get('/', (req, res) => {
  res.type('html').send(`<h1>项目启动成功</h1><h2>当前版本:${process.env.VERSION}</h2>`);
});

// 在所有路由之后添加404处理中间件 404处理
app.use((req, res) => {
  res.status(404).json({ error: 'Not Found' });
});

// 错误处理中间件
app.use((err: Error, req: express.Request, res: express.Response, next: express.NextFunction) => {
  console.error(err.stack);
  res.status(500).json({ error: 'Internal Server Error' });
});

// 启动服务器
app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

// 处理进程退出
process.on('SIGINT', async () => {
  try {
    const { closePool } = await import('./config/database');
    await closePool();
  } catch (err) {
    console.error('关闭连接池失败:', err);
  } finally {
    process.exit(0); // 确保最终退出
  }
});
